//==============================================================================
#ifndef _BUTTON_H_
#define _BUTTON_H_

#pragma once
#include "Component.h"
#include "SDL_image.h"

const std::string BUTTON_PATH = IMAGES_PATH +"btn/";

//==============================================================================
namespace ui{

class Button : public Component
{
private:
	bool pressed; //Flag que revela si el botón se encuentra presionado
	SDL_Surface* pressSurf; //Superficie del botón cuando esta presionado
	SDL_Surface* unPressSurf; //Superficie del botón cuando no esta presionado

public:
	Button(int posX, int posY, int width, int height, COMPONENT_TYPE type, string name);

	//El contructor recibe la posicioón (X,Y) del botón como también su tipo.
	//Dependiendo del tipo elegido se estableceran las superficies que serán dibujadas
	//COMPONENT_TYPE -> OPEN_BUTTON, CLOSE_BUTTON, CREATE_BUTTON, REMOVE_BUTTON, QUIT_BUTTON, UPDATE_BUTTON, ACCEPT_BUTTON, CANCEL_BUTTON, SAVE_BUTTON, SCROLL_UP, SCROLL_DOWN
	Button(int posX, int posY, COMPONENT_TYPE type);
	~Button(void);

	void setPressed(bool flag);
	bool getPressed();
	void setPressSurf(SDL_Surface* surface);
	SDL_Surface* getPressSurf();
	void setUnPressSurf(SDL_Surface* surface);
	SDL_Surface* getUnPressSurf();

	//Se realiza la carga de las imagenes de acuerdo a la ruta pasada como parametro
	void loadSurface() throw (SDL_Exception);

	//Si el botón fue presionado y luego soltado dentro de su área devolverá su tipo BUTTON_*, lo que derivará a una acción a realizar por el utilitario
	//Caso contrario devolvera el tipo NONE.
    COMPONENT_TYPE handleEvent(SDL_Event* event);

	//Dibuja el boton en la pantalla pasada por parámetro, si tuvo algun problema hace un throw std::string("Blit Error")
	void draw( SDL_Surface *screen) throw (SDL_Exception);

	static const string BUTTON_TYPE[];
};
};
#endif
//==============================================================================
